"""
函数的作用：
    函数的就是将一段具有独立功能的代码块整合到一个整体并命名，在需要的位置调用这个名称即可完成对应的需求。
"""
"""
1、函数的使用步骤：
    · 定义函数：
        def 函数名(参数):
        代码1
        代码二
        ……

    · 调用函数：
        函数名(参数)
    PS：
        1、不同的需求，参数可有可无
        2、在Python中，函数必须是先定义后使用
"""

"""
2、函数的参数作用
"""


# 1、完成需求如下：一个函数完成两个数1，2的加法运算
def sum1():
    res = 1 + 2
    print(res)


sum1()


# 2、定义函数的形参

def sum2(a, b):
    """定义形参：定义函数的同时，也定义了形参，"""
    res = a + b
    print(res)


"""传入实参：调用函数时，传入了真是的数据，真实的数据为实参"""
sum2(10, 20)

"""
3、 函数的返回值作用:
    例如：我们去超市购物买烟，给钱之后，是不是售货员会返回给我们烟。
    在函数中，如果需要返回结果给用户，需要使用函数返回值       。
"""


def buy():
    """使用return作用 返回一个返回值"""
    return "烟"


# 使用变量goods 保存函数返回值
goods = buy()
# 然后再打印这个变量名
print(goods)


# 应用：找事做一个计算器，计算任意两数字之和，并保存结果
def sum3(a, b):
    return a + b


s = sum3(11, 22)
print(s)

'''
4、函数的说明文档：
    def 函数()：
    """说明文档位置在这，而且还必须是用双引号的这个"""
    代码块1
    代码块2
    ……
'''


# 查看文档说明：help(函数名)
def add_fun(aa, bb):
    """这个是说明文档的位置"""
    return aa * bb


# 使用help(函数名)直接打印来查看，函数名内的括号不能要，不然的话就是调用了，就不是查看了。
help(add_fun)

"""
5、函数嵌套函数：
    · 所谓函数嵌套函数，是指一个函数里面有调用了另外一个函数
"""


# 示例：
def testB():
    print('---- testB start----')
    print('这里是testB函数执行的代码...(省略)...')
    print('---- testB end----')


def testA():
    print('---- testA start----')
    testB()
    print('---- testA end----')


# testA函数调用了testB函数：
# 执行流程就是：先运行testA里的上部分，然后testB，最后是testA的下部分
testA()


# 练习一：定义形参n，n是几就打印几行=====
def print_line():
    print("=======")


def print_lines(n):
    for i in range(n):
        print_line()


print_lines(6)


# 练习二
# 定义第一个函数，计算三个数的和；
# 定义第二个函数，计算三个数的平均值，第二个函数要嵌套第一个函数

def add_fun(a, b, c):
    return a + b + c


def avg_sum(x, y, z):
    res = add_fun(x, y, z)
    return res / 3


print(avg_sum(3, 6, 9))
